﻿

CREATE proc [dbo].[SavePerson]
@PersKey		int,
@PersTS			nvarchar(50),
@OrgKey			int = null,
@Änderung		nvarchar(50),
@Durchwahl		nvarchar(50),
@Zuname			nvarchar(50),
@Vorname		nvarchar(50),
@Geschlecht		tinyint,
@Titel1Key		int = null,
@Titel2Key		int = null,
@Titel3Key		int = null,
@Adresse		nvarchar(50),
@EPLZ			int = null,
@Straße			nvarchar(50),
@VorwahlKey		int = null,
@Mobil			nvarchar(50),
@PrivTelefon	nvarchar(50),
@PrivFax		nvarchar(50),
@MailingSperre	bit,
@Notiz			nvarchar(max),
@Mitarbeiter	bit,
@Kürzel			nvarchar(5),
@EMail			nvarchar(50),
@UserID			int

as

begin
	set nocount on

	declare @rc int,
			@now datetime2(7) = sysdatetime(),
			@logText nvarchar(150),
			@userName nvarchar(10)

	select	@userName = rtrim(coalesce(u.LoginName,''))
	from	[User].[datUser] u
	where	u.UserID = @UserID
			
	
	begin tran

	begin try

		;with sel
		as
		(
			select	@PersKey		'PersKey',
					@PersTS			'PersTS',
					@OrgKey			'OrgKey',
					@Änderung		'Änderung',
					@Durchwahl		'Durchwahl',
					@Zuname			'Zuname',
					@Vorname		'Vorname',
					@Geschlecht		'Geschlecht',
					@Titel1Key		'Titel1Key',
					@Titel2Key		'Titel2Key',
					@Titel3Key		'Titel3Key',
					@Adresse		'Adresse',
					@EPLZ			'EPLZ',
					@Straße			'Straße',
					@VorwahlKey		'VorwahlKey',
					@Mobil			'Mobil',
					@PrivTelefon	'PrivTelefon',
					@PrivFax		'PrivFax',
					@MailingSperre	'MailingSperre',
					@Notiz			'Notiz',
					@Mitarbeiter	'Mitarbeiter',
					@Kürzel			'Kürzel',
					@EMail			'EMail',
					@now			'ChangeDate',
					@userName		'UserName'
		)
		merge into dbo.Person t
		using sel s on
			s.PersKey = t.PersKey
		when not matched by target then
		insert (
			PersTS, 
			[Änderung], 
			Zuname, 
			Vorname, 
			Geschlecht, 
			TitelKey1, 
			TitelKey2,
			TitelKey3,
			Adresse, 
			EPLZ, 
			Straße, 
			VorwahlKey, 
			Mobil, 
			PrivTelefon, 
			PrivFax, 
			MailingSperre, 
			Notiz, 
			Mitarbeiter, 
			[Kürzel], 
			eMail,
			CreatedOn,
			CreatedBy,
			LastChangedOn,
			LastChangedBy
		)
		values (
			s.PersTS, 
			s.[Änderung], 
			s.Zuname, 
			s.Vorname, 
			s.Geschlecht, 
			s.Titel1Key, 
			s.Titel2Key, 
			s.Titel3Key, 
			s.Adresse, 
			s.EPLZ, 
			s.Straße, 
			s.VorwahlKey, 
			s.Mobil, 
			s.PrivTelefon, 
			s.PrivFax, 
			s.MailingSperre, 
			s.Notiz, 
			s.Mitarbeiter, 
			s.Kürzel, 
			s.eMail,
			s.ChangeDate,
			s.UserName,
			s.ChangeDate,
			s.UserName
		)
		when matched then
		update
			set	PersTS			= s.PersTS, 
				[Änderung]		= s.[Änderung], 
				Zuname			= s.Zuname, 
				Vorname			= s.Vorname, 
				Geschlecht		= s.Geschlecht, 
				TitelKey1		= s.Titel1Key, 
				TitelKey2		= s.Titel2Key, 
				TitelKey3		= s.Titel3Key,
				Adresse			= s.Adresse, 
				EPLZ			= s.EPLZ, 
				Straße			= s.Straße, 
				VorwahlKey		= s.VorwahlKey, 
				Mobil			= s.Mobil, 
				PrivTelefon		= s.PrivTelefon, 
				PrivFax			= s.PrivFax, 
				MailingSperre	= s.MailingSperre, 
				Notiz			= s.Notiz, 
				Mitarbeiter		= s.Mitarbeiter, 
				[Kürzel]		= s.[Kürzel], 
				eMail			= s.eMail,
				LastChangedOn	= s.ChangeDate,
				LastChangedBy	= s.UserName
				;
		
		if @PersKey = 0
		begin
			select @PersKey = @@IDENTITY
		end		

	end try
	begin catch
		Select @PersKey 'PersKey', -1 'Return', ERROR_MESSAGE() 'Error' 
		goto WithError
	end catch

	select @PersKey 'PersKey', 0 'Return', null 'Error'

	commit tran
	
	return 0

WithError:
	if @@TRANCOUNT > 0
	begin
		set @logText = 'SavePerson: ' + cast(@PersKey as char(10))
		exec @rc = dbo.SaveLog
			@UserID = -1,
			@LogType = 'S',
			@LogArea = 'Bv',
			@LogDetails = @logText,
			@IsError = 1
		rollback tran
	end
	return -1	

end